package cn.smile.business.basic;

import cn.smile.bean.dto.basic.TopUpBillDTO;
import cn.smile.bean.entity.basic.TopUpBill;
import cn.smile.bean.form.basic.bill.QueryTopUpForm;
import cn.smile.bean.form.basic.bill.TopUpAddForm;
import cn.smile.commons.domain.IBaseService;
import cn.smile.commons.enums.basic.MiniProjectCountEnum;
import com.baomidou.mybatisplus.core.metadata.IPage;

import java.math.BigDecimal;
import java.util.List;

public interface ITopUpBillService extends IBaseService<TopUpBill> {

    /**
     * 新增充值账单
     *
     * @param form 新增参数
     * @return 新增结果
     */
    Boolean addTopUp(TopUpAddForm form);

    /**
     * 统计今日充值
     *
     * @param countEnum 统计范围
     * @return 充值金额
     */
    BigDecimal countTopUpAmount(MiniProjectCountEnum countEnum);

    /**
     * 统计充值金额
     *
     * @param timeStart 统计开始时间
     * @param timeEnd   统计截止时间
     * @return 金额
     */
    BigDecimal countTopUpAmount(String timeStart, String timeEnd);

    /**
     * 分页查询充值记录
     *
     * @param form 查询参数
     * @return 查询结果
     */
    IPage<TopUpBillDTO> getPage(QueryTopUpForm form);

    /**
     * 列表查询充值记录
     *
     * @param form 查询参数
     * @return 查询结果
     */
    List<TopUpBillDTO> getList(QueryTopUpForm form);

    /**
     * 删除充值记录
     *
     * @param id 充值记录ID
     * @return 删除结果
     */
    Boolean delTopUp(String id);

    /**
     * 统计续卡会员数量
     *
     * @param timeStart 查询时间-开始
     * @param timeEnd   查询时间-结束
     * @return 续卡会员数量
     */
    Long countContinueMemberNum(String timeStart, String timeEnd);

    /**
     * 查询账单详情
     *
     * @param id 数据ID
     * @return 查询结果
     */
    TopUpBillDTO getBillById(String id);
}
